package com.huike;

import com.huike.clues.service.ITbActivityService;
import com.huike.clues.service.impl.SysDictTypeServiceImpl;
import org.simpleframework.xml.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * 启动程序
 *
 *  1.CommandLineRunner (缓存预热)
 *   在使用SpringBoot构建项目时，我们通常有一些预先数据的加载。那么SpringBoot提供了一个简单的方式来实现CommandLineRunner
 *   需要时，只需实现该接口就行。如果存在多个加载的数据，我们也可以使用 @Order注解来排序
 *
 *  2.InitializingBean
 *   为bean提供了属性初始化后的处理方法，它只包括afterPropertiesSet方法，凡是继承该接口的类，在bean的属性初始化后都会执行该方法,是
 *   bean初始化的一种方法
 *
 *  3.@PostConstruct
 *   在方法上加该注解会在项目启动的时候执行该方法，也可以理解为在spring容器初始化的时候执行该方法。
 *   从Java EE5规范开始，Servlet中增加了两个影响Servlet生命周期的注解，@PostConstruct和 @PreDestroy
 *   这两个注解被用来修饰一个非静态的void（）方法。
 *
 *  4.BeanPostProcessor
 *   Bean后置处理器，它是Spring中定义的接口，在Spring容器的创建过程中（具体为Bean初始化前后）会回调BeanPostProcessor中定义的两个方法。
 *   其中 postProcessBeforeInitialization方法会在每一个bean对象的初始化方法调用之前回调；
 *       postProcessAfterInitialization方法会在每个bean对象的初始化方法调用之后被回调。
 *
 *  优先级执行顺序:
 *  Constructor(类构造方法) > @Autowired > @PostConstruct > BeanPostProcessor > CommandLineRunner
 *
 *
 */
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableScheduling
@EnableTransactionManagement
public class HuiKeApplication implements CommandLineRunner {

    @Autowired
    private ITbActivityService activityService;

    public static void main(String[] args){
        SpringApplication.run(HuiKeApplication.class, args);
    }

    @Override
    public void run(String... args)  {
        /*try{
            //加载所有活动code到缓存
            activityService.loadAllActivityCode();
        }catch (Exception ex){
            ex.printStackTrace();
        }*/
    }
}



